home *** CD-ROM | disk | FTP | other *** search
/ Compendium Deluxe 2 / LSD and 17bit Compendium Deluxe - Volume II.iso / a / prog / asmsrc / vec_3d.lha / vec_3d_filled_glenz.s < prev   
Text File  |  1994-06-05  |  14KB  |  722 lines

  1.  
  2.     ;example of a Glenz vector, this routine is boring.....
  3.     
  4.  
  5.      Section Copperlist,code_C
  6.  
  7.     opt    c-,o+,w-
  8.     opt    d+
  9.  
  10. scale    = 200
  11. bgc    = $dff1fe
  12. killsys    = 1
  13.  
  14.     include    "dh0:include/object.i"
  15.  
  16. Start:    lea    $dff000,a5        ; hardware base address
  17.  
  18.     Move.w    $1c(a5),OldInt    ; Save Old Interupts
  19.     Move.w    $02(a5),OldDma    ; Save Old DMA
  20.  
  21.     Move.w    #$7fff,$9a(a5)    ; Clear DMA
  22.     Move.w    #$7fff,$96(a5)    ; Clear Interupts
  23.     Move.w    #$7fff,$9c(a5)    ; Clear Interupt Requests
  24.     
  25.     Move.b    #$7f,$bfed01    ; kill timers (rem me for disk)
  26.     Move.l    $6c.w,OldV3        ; save level 3 int
  27.  
  28.     Move.l    #my_level3,$6c.w    ; put new copper interupt
  29.     Move.l    #my_copper,$80(a5)     ; Address of copper 1
  30.     Move.w    #$c010,$9a(a5)    ; Start interupts
  31.  
  32.     Move.w    #$83ef,$96(a5)    ; Start DMA ( 83ff for disk dma)
  33.     Move.w    #1,$88(a5)        ; Strobe for copper start
  34.  
  35. .wait    move.l    $dff004,d0
  36.     and.l    #$1ff00,d0
  37.     cmp.l    #$ff00,d0
  38.     bne.s    .wait
  39.     
  40.     move.l    Screen1,d0            ; store address of bitplane0
  41.     move.w    d0,bitplane0_lo        ; into the copper list
  42.     swap    d0
  43.     move.w    d0,bitplane0_hi
  44.     swap    d0
  45.     add.l    #40*256,d0
  46.     move.w    d0,bitplane1_lo        ; into the copper list
  47.     swap    d0
  48.     move.w    d0,bitplane1_hi
  49.     swap    d0
  50.     add.l    #40*256,d0
  51.     move.w    d0,bitplane2_lo        ; into the copper list
  52.     swap    d0
  53.     move.w    d0,bitplane2_hi
  54.  
  55.     move.l    screen1,d0
  56.     move.l    screen2,screen1
  57.     move.l    d0,screen2
  58.  
  59.     bsr    filled_vectors
  60.  
  61.     btst    #2,$dff016
  62.     beq    .skip
  63.  
  64.     lea    cube_3d_1,a3
  65.     add.w    #4,obj_arot(a3)
  66.     and.w    #$1fe,obj_arot(a3)
  67.     add.w    #2,obj_brot(a3)
  68.     and.w    #$1fe,obj_brot(a3)
  69.     add.w    #4,obj_crot(a3)
  70.     and.w    #$1fe,obj_crot(a3)
  71.  
  72. .skip    btst    #6,$bfe001
  73.     bne    .wait
  74.  
  75.  
  76.     lea    $dff000,a5        ; hardware base address
  77.     move.l    #0,$80(a5)        ; blank copper list
  78.     move.l    #0,$84(a5)        ; if gfx lib not open (slayer boot)
  79.     move.w    #0,$180(a5)        ; bgc to black
  80.     
  81.     Move.l    OldV3,$6c.w        ; restore old l3
  82.     
  83.     Lea    GfxLib,a1        ; Pointer to Library Text
  84.     move.l    4.w,a6
  85.     jsr    -132(a6)        ; forbid
  86.     Move.l    4.w,a6        ; Exec
  87.     Moveq.l    #0,d0        ; Clear D0
  88.     Jsr    -$228(a6)        ; Open Library
  89.     cmp.l    #0,d0
  90.     beq    no_gfx_lib        ; if gfx lib not open dont restore copper lib (slayer boot)
  91.     
  92.     Move.l    d0,a1            
  93.     Move.l    $26(a1),$80(a5)    ; restore copper 1
  94.     Move.l    $32(a1),$84(a5)    ; restore copper 2
  95. no_gfx_lib:
  96.  
  97.     Move.w    OldInt,d0        ; start old interupts
  98.     Or.w    #$8000,d0
  99.     Move.w    d0,$9a(a5)
  100.     Move.w    OldDma,d0        ; start old DMA
  101.     Or.w    #$8000,d0
  102.     Move.w    d0,$96(a5)
  103.     Move.b    #$9b,$bfed01    ; Start Timers
  104.     Move.l    4.w,a6        ; Close Gfx lib
  105.     Jsr    -$19e(a6)
  106.     move.l    4.w,a6
  107.     jsr    -138(a6)        ; permit
  108.  
  109.     move.w    #0,$bfec00        ; clear kbd
  110.  
  111.     Moveq.l    #0,d0        ; No errors
  112.     Rts            ; Exit
  113.     
  114. Error:    moveq    #0,d0            ; fin
  115.     rts
  116.  
  117. keys:    btst    #6,$bfe001
  118.     bne.s    keys
  119.     rts
  120.  
  121.     *****************************************************
  122.     
  123. my_level3:    Movem.l    d0-d7/a0-a6,-(a7)    ; New copper
  124.     Move.w    #$10,$dff09c    ; Serviced Interupt
  125.  
  126. Exit:    Movem.l    (a7)+,d0-d7/a0-a6
  127.     Rte            ; Return from Interupt
  128.  
  129.     *****************************************************
  130.  
  131. wait_blit:    
  132. .loop    Btst    #6,$dff002
  133.     Bne.s    .loop
  134.     
  135.     rts
  136.  
  137.  
  138. filled_vectors:
  139.     Move.l    #scrbuf1,a0
  140.     Lea    $dff000,a6
  141.  
  142.     bsr    wait_blit
  143.     
  144.     move.w    #$f00,bgc        ; start cls
  145.                 ; and convert 3d            ; co-ords to 2d
  146.     Move.l    #$1f00000,$dff040
  147.     Move.l    #scrbuf1+4,$dff054
  148.     move.l    #0,$dff074
  149.     move.w    #8,$dff066
  150.     Move.w    #768*64+16,$dff058
  151.     
  152.     lea    cube_3d_1,a3
  153.     bsr    scale_3d
  154.  
  155.     move.w    #$888,bgc        ; calc which surfaces
  156.                 ; need to be hidden
  157.     bsr    hide_lines
  158.  
  159.     move.w    #$fff,bgc        ; wait for blitter
  160.  
  161.     bsr    wait_blit
  162.  
  163.     move.w    #$00f,bgc        ; draw lines
  164.  
  165.     lea    cube_3d_1,a3
  166.     bsr    plot_2d_object
  167.     
  168.     move.w    #$800,bgc        ; start fill
  169.     
  170.     bsr    fill_screen
  171.     
  172.     move.w    #$444,bgc        ; finished
  173.                     ; but blitter
  174. .wait3    Btst    #6,$dff002
  175.     Bne.s    .wait3
  176.  
  177.     move.w    #$000,bgc        ; finished
  178.  
  179.     Rts
  180.  
  181.     *************************************
  182. fill_screen:
  183.     lea    $dff000,a6
  184.  
  185.     lea    scrbuf1,a0
  186.     move.l    screen1,a1
  187.     add.l    #768*40-6,a0
  188.     add.l    #768*40-6,a1
  189.  
  190.     bsr    wait_blit
  191.  
  192.     move.l    #$09f00012,$40(a6)    ;set copy/fill/descending mode                ;descending mode needed for filling
  193.     move.w    #8,$64(a6)
  194.     move.w    #8,$66(a6)
  195.     move.l    a0,$50(a6)        ;vectorplane address
  196.     move.l    a1,$54(a6)        ;bitplane address
  197.     move.w    #768*64+16,$58(a6)    ;set bltsize
  198.  
  199.     rts
  200.  
  201.  
  202.     *************************************
  203.  
  204. scale_3d:    lea    sintable+64,a1    
  205.  
  206.     movem.l     0(a3),a4/a5    ; connect, co-ords
  207.     move.w    12(a3),d7        ; no of points-1
  208.     move.l    36(a3),a6
  209. .loop    
  210.  
  211.     **** rotate object *****
  212.  
  213.     movem.w    (a5)+,d0-d1        ; get obj x,y
  214.     Move    d0,d2
  215.     Move    d1,d3
  216.  
  217.     Move    22(a3),d6        ; c rot
  218.     Move     64(a1,d6),d4    ; sine
  219.     Move    -64(a1,d6),d5    ; cosine
  220.     Muls    d4,d0
  221.     Muls    d5,d1
  222.     Sub.l    d1,d0
  223.     Add.l    d0,d0
  224.     Swap    d0        ;d0 holds intermediate x coord
  225.     Muls    d5,d2
  226.     Muls    d4,d3
  227.     Add.l    d3,d2
  228.     Add.l    d2,d2
  229.     Swap    d2        ;d2 holds intermediate y coord
  230.     Move    d2,d4
  231.  
  232.     Move    (a5)+,d1        ;z coord
  233.     Move    d1,d3
  234.     Move    18(a3),d6        ; a rot
  235.     Move     64(a1,d6),d5    ; sine
  236.     Move    -64(a1,d6),d6    ; cosine
  237.     Muls    d5,d2
  238.     Muls    d6,d1
  239.     Sub.l    d1,d2
  240.     Add.l    d2,d2
  241.     Swap    d2        ;d2 holds the final y coord
  242.     Muls    d5,d3
  243.     Muls    d6,d4
  244.     Add.l    d4,d3
  245.     Add.l    d3,d3
  246.     Swap    d3        ;d3 holds intermediate z coord
  247.  
  248.     Move    d0,d1
  249.     Move    d3,d4
  250.     Move    20(a3),d6        ; b rot
  251.     Move     64(a1,d6),d5    ; sine
  252.     Move    -64(a1,d6),d6    ; cosine
  253.     Muls    d5,d3
  254.     Muls    d6,d0
  255.     Sub.l    d0,d3
  256.     Add.l    d3,d3
  257.     Swap    d3        ;d3 holds the final z coord
  258.     Muls    d6,d4
  259.     Muls    d5,d1
  260.     Add.l    d4,d1
  261.     Add.l    d1,d1
  262.     Swap    d1        ;d1 holds the final x coord
  263.  
  264.  
  265.     **** scale object ****
  266.  
  267.     move.w    d3,d5
  268.     move.w    d2,d4
  269.     move.w    d1,d3
  270.  
  271.     add.w    24(a3),d3        ; x
  272.     add.w    26(a3),d4        ; y
  273.     add.w    28(a3),d5        ; z
  274.  
  275.      add.w    30(a3),d5        ; depth
  276.     add.w    #scale,d5
  277.     move.l    #scale<<16,d6
  278.     
  279.     divu    d5,d6
  280.  
  281.     *** calc x 2d point **
  282.  
  283.     muls    d6,d3
  284.     add.l    d3,d3
  285.     swap    d3
  286.     
  287.     *** calc y 2d point **
  288.  
  289.     muls    d6,d4
  290.     add.l    d4,d4
  291.     swap    d4
  292.  
  293.     *** centre of screen **
  294.  
  295.     add.w    32(a3),d3
  296.     add.w    34(a3),d4
  297.  
  298.     movem.w    d3-d4,(a6)
  299.     lea    4(a6),a6
  300.  
  301.     dbf    d7,.loop
  302.  
  303.     move.w    14(a3),d7        ; no of lines -1
  304.  
  305.     rts
  306.  
  307.     *************************************
  308.  
  309. plot_2d_object:
  310.      
  311.      bsr    wait_blit
  312.  
  313.     *** setup blitter for line draw ***
  314.     
  315.     move.l    #0,$dff040        ; clr blitcon0,blitcon1
  316.     Move.l    #-1,$dff044        ; fwm, lwm
  317.     move.l    #0,$dff050        ; a source
  318.     Move.w    #40,$dff060        ; modo
  319.     Move.l    #$ffff8000,$dff072    ; line draw fn
  320.     
  321.     move.l    36(a3),a1        ;get coord buffer
  322.     move.l    40(a3),a5        ;get surface buffer
  323.  
  324.     move.l    0(a3),a2        ; connect list
  325.     move.l    8(a3),a6        ; surface list
  326.  
  327.     move.w    16(a3),no_of_surf    ;get number of surfaces on vector
  328.  
  329. .next_surf    move.l    (a6)+,d7        ;get number of sides to surface
  330.     move.l    (a6)+,a4        ;get address of surface list
  331.     move.l    (a6)+,a0        ;get address of screen memory
  332.     move.l    (a6)+,multiplane    ;is face on more that one plane
  333.  
  334.     ; check if surface visible
  335.  
  336.     move.l    (a5)+,d0
  337.     move.l    d0,d6
  338.     and.l    #$f0000000,d6
  339.     beq    .glenz
  340.     and.l    #$0fffffff,d0
  341.  
  342.     cmp.l    #scrbuf1+256*40,a0
  343.     bgt    .dont_draw
  344.     
  345.     lea    256*40(a0),a0
  346.     
  347. .glenz    move.l    d0,a4
  348.     
  349. .loop    move.w    (a4)+,d5
  350.     move.w    0(a2,d5),d6        ; 1st connect
  351.     movem.w    (a1,d6),d0-d1    ; get x1,y1
  352.     move.w    2(a2,d5),d6        ; 2nd connect
  353.     movem.w    (a1,d6),d2-d3    ; get x2,y2
  354.  
  355.     cmp.w    d1,d3
  356.     bgt.s    .NormalDraw
  357.     exg    d0,d2
  358.     exg    d1,d3
  359.     beq    .NoDraw
  360.  
  361. .NormalDraw    movem.l    d0-d7/a0-a6,-(a7)
  362.     move.w    #40,d5        ; screen width
  363.     Lea    $dff000,a6
  364.     lea    filshift,a3        ; pre-calc line-shift table
  365.     lea    llength,a5        ; pre-calc line-length table
  366.     Bsr    LineDraw
  367.     movem.l    (a7)+,d0-d7/a0-a6
  368.  
  369. .Nodraw    dbf    d7,.loop
  370.  
  371. .dont_draw    sub.w    #1,no_of_surf
  372.     bpl    .next_surf
  373.  
  374.     rts
  375.  
  376.     *************************************************
  377.     
  378. hide_lines:
  379.     move.l    36(a3),a1        ;get coord-storage area
  380.     move.l    40(a3),a5        ;get surface draw buffer
  381.  
  382.     move.l    0(a3),a2        ; connect list
  383.     move.l    8(a3),a6        ; surface list
  384.  
  385.     move.w    16(a3),no_of_surf    ;get number of surfaces on vector
  386.  
  387. .next_surf    move.l    (a6)+,d7        ;get number of sides to surface
  388.     move.l    (a6)+,a4        ;get address of surface list
  389.     move.l    (a6)+,a0        ;get address of screen memory
  390.     move.l    (a6)+,multiplane    ;is face on more that one plane
  391.  
  392.     ;calculate if surface visible
  393.  
  394.     move.l    a4,(a5)
  395.  
  396.     move.w    0(a4),d6        ; get point on surface
  397.     move.w    0(a2,d6),d4        ; get connect for point
  398.     move.w    2(a2,d6),d5        ; get next connect for point
  399.     move.w    0(a1,d4),d0        ; get x screen co-ord for contect
  400.     sub.w    0(a1,d5),d0        ; sub y screen co-ord for contect
  401.     move.w    2(a1,d4),d1        ; get x screen co-ord for contect
  402.     sub.w    2(a1,d5),d1        ; sub y screen co-ord for contect
  403.     move.w    2(a4),d6        ; get next point on surface
  404.  
  405.     move.w    0(a2,d6),d4        ; get connect for point
  406.     move.w    2(a2,d6),d5        ; get next connect for point
  407.     
  408.     move.w    0(a1,d4),d2        ; get x screen co-ord for contect
  409.     sub.w    0(a1,d5),d2        ; sub y screen co-ord for contect
  410.     move.w    2(a1,d4),d3        ; get x screen co-ord for contect
  411.     sub.w    2(a1,d5),d3        ; sub y screen co-ord for contect
  412.     muls    d3,d0        ; multi (y-x) co-ord surface connect 2 by (y-x) co-ord surface connect 1
  413.     muls    d2,d1        ; multi (y-x) co-ord surface connect 2 by (y-x) co-ord surface connect 1
  414.     cmp.w    d0,d1    
  415.     bpl    .dont_draw
  416.     
  417.     move.l    a4,(a5)
  418.     or.l    #$f0000000,(a5)
  419.     
  420. .dont_draw    lea    4(a5),a5
  421.     sub.w    #1,no_of_surf
  422.     bpl    .next_surf
  423.  
  424.     rts
  425.  
  426.  
  427.     ********************************************
  428.     ** FILLED LINEDRAW ROUTINE                **
  429.     **                  **
  430.     ** PRELOAD :              **
  431.     ** $DFF060=SCREENWIDTH (WORD)          **
  432.     ** $DFF072=-$8000 (LONGWORD)          **
  433.     ** $DFF044=-1 (LONGWORD)          **
  434.     **                  **
  435.     ** INPUT :                  **
  436.     ** D0=X1 D1=Y1 D2=X2 D3=Y2                **
  437.     ** A0=SCREEN ADDRESS                      **
  438.     ** A3=X-SHIFT TABLE              **
  439.     ** A5=LINE-SIZE TABLE              **
  440.     ********************************************
  441.  
  442. LineDraw:    movem.w    d0/d1/d2/d3/d5,-(a7)    ;store coord registers
  443.     move.w    d1,d4
  444.     muls    d5,d4
  445.     move.w    d0,d5
  446.     add.l    a0,d4
  447.     asr.w    #3,d5
  448.     add.l    d5,d4        ; was .w, bug fixed
  449.     moveq    #0,d5
  450.     sub.w    d1,d3
  451.     sub.w    d0,d2
  452.     bpl.s    .line2
  453.     moveq    #1,d5
  454.     neg.w    d2
  455. .line2    move.w    d3,d1
  456.     add.w    d1,d1
  457.     cmp.w    d2,d1
  458.     dbhi    d3,.line3
  459. .line3    move.w    d3,d1
  460.     sub.w    d2,d1
  461.     bpl.s    .line4
  462.     exg    d2,d3
  463. .line4    addx.w    d5,d5
  464.     add.w    d2,d2
  465.     move.w    d2,d1
  466.     sub.w    d3,d2
  467.     addx.w    d5,d5
  468.     add.w    d0,d0
  469.  
  470. .wait    Btst    #6,$dff002
  471.     Bne.s    .wait
  472.  
  473.     move.w    d2,$52(a6)        ; a source
  474.     sub.w    d3,d2
  475.     add.w    d3,d3
  476.     move.w    (a3,d0),$40(a6)    ; blitcon0
  477.     move.b    oct(PC,d5.w),$43(a6)    ; blitcon1
  478.     move.l    d4,$48(a6)        ; c source
  479.     move.l    d4,$54(a6)        ; d dest
  480.     movem.w    d1/d2,$62(a6)    ; b mod & a mod
  481.     move.w    (a5,d3),$58(a6)    ; size
  482.  
  483.     movem.w    (a7)+,d0/d1/d2/d3/d5    ;restore coords
  484.     rts
  485.     
  486. oct:    dc.l    $3431353,$b4b1757
  487.  
  488. ********************************************
  489. ** SECOND LINE-DRAWER ROUTINE WHEN BOTH   **
  490. ** PLANES NEEDED FOR SURFACE              **
  491. ********************************************
  492.  
  493. linedraw2:    move.w    d1,d4
  494.     muls    d5,d4
  495.     move.w    d0,d5
  496.     add.l    a0,d4
  497.     asr.w    #3,d5
  498.     add.w    d5,d4
  499.     moveq    #0,d5
  500.     sub.w    d1,d3
  501.     sub.w    d0,d2
  502.     bpl.s    line5
  503.     moveq    #1,d5
  504.     neg.w    d2
  505. line5    move.w    d3,d1
  506.     add.w    d1,d1
  507.     cmp.w    d2,d1
  508.     dbhi    d3,line6
  509. line6    move.w    d3,d1
  510.     sub.w    d2,d1
  511.     bpl.s    line7
  512.     exg    d2,d3
  513. line7    addx.w    d5,d5
  514.     add.w    d2,d2
  515.     move.w    d2,d1
  516.     sub.w    d3,d2
  517.     addx.w    d5,d5
  518.     add.w    d0,d0
  519.  
  520. .wait    Btst    #6,$dff002
  521.     Bne.s    .wait
  522.  
  523.     move.w    d2,$52(a6)
  524.     sub.w    d3,d2
  525.     add.w    d3,d3
  526.     move.w    (a3,d0),$40(a6)
  527.     move.b    oct(PC,d5.w),$43(a6)
  528.     move.l    d4,$48(a6)
  529.     move.l    d4,$54(a6)
  530.     movem.w    d1/d2,$62(a6)
  531.     move.w    (a5,d3),$58(a6)
  532.     rts
  533.  
  534.  
  535.     *************************************
  536.  
  537.  
  538.  
  539.  
  540.     Section    copdat,Data_c
  541.  
  542. oldint:    dc.l    0
  543. olddma:    dc.l    0
  544. oldv3:    dc.l    0
  545.  
  546. my_copper:        dc.w    $100,$3200        ; 4 bp - lores - 
  547.         dc.w    $102,$00        ; hsr
  548.         dc.w    $104,0        ; bp control reg
  549.         dc.w    $108,0        ; bp modulo - odd
  550.         dc.w    $10a,0        ; bp modulo - even
  551.         dc.w    $180,0        ; colour 0 to black
  552.         dc.w    $1fc,0
  553.         
  554.         dc.w    $120,0,$122,0
  555.         dc.w    $124,0,$126,0
  556.         dc.w    $128,0,$12a,0
  557.         dc.w    $12c,0,$12e,0        
  558.         dc.w    $130,0,$132,0
  559.         dc.w    $134,0,$136,0
  560.         dc.w    $138,0,$13a,0
  561.         dc.w    $13c,0,$13e,0
  562.         
  563.         dc.w    $092,$38    ; bp start horz
  564.         dc.w    $094,$d0    ; bp stop horz
  565.         dc.w    $08e,$2c8c    ; bp window start left
  566.         dc.w    $090,$2ae3    ; bp window bot right
  567.         
  568. cmap:        dc.w    $180,0
  569.         dc.w    $182,$f88
  570.         dc.w    $184,$f44
  571.         dc.w    $186,$f00
  572.         dc.w    $188,$4f4
  573.         dc.w    $18a,$8f8
  574.         dc.w    $18c,$cfc
  575.         dc.w    $18e,$fff
  576.         
  577.         dc.w      $e0
  578. bitplane0_hi:    dc.w    0,$e2
  579. bitplane0_lo:    dc.w    0,$e4
  580. bitplane1_hi:    dc.w    0,$e6
  581. bitplane1_lo:    dc.w    0,$e8
  582. bitplane2_hi:    dc.w    0,$ea
  583. bitplane2_lo:    dc.w    0
  584.  
  585.         dc.w    $0101,$fffe
  586.         dc.w    $9c,$8010    ; irq set bits - ?
  587.         dc.w    $ffff,$fffe    ; end of copper list
  588.     
  589. gfxlib:        dc.b    "graphics.library",0
  590.         even
  591.  
  592. screen1:        dc.l    screena
  593. screen2:        dc.l    screenb
  594.  
  595. ***********************************************************************
  596.  
  597.     section    stuff,data
  598.  
  599.  
  600. a set 0
  601. filshift
  602.         REPT    320
  603.         dc.w    ((a&$f)*$1000)+$a4a
  604. a set a+1
  605.         endr
  606. a set 0
  607. llength                ;table for line length vals
  608.         REPT    320
  609.         dc.w    a*64+2
  610. a set a+1
  611.         ENDR
  612.  
  613.  
  614. no_of_surf:    dc.l    0
  615. multiplane:    dc.l    0
  616.  
  617. cube_3d_1:    dc.l    cube_connect
  618.     dc.l    cube_points
  619.     dc.l    cube_surfaces
  620.     dc.w    8-1        ; points
  621.     dc.w    12-1        ; connects
  622.     dc.w    12-1        ; surfaces
  623.     Dc.w    $1ac    ; a
  624.     Dc.w    $e0    ; b
  625.     Dc.w    $1b6    ; c
  626.     Dc.w    0    ; x
  627.     Dc.w    0    ; y
  628.     Dc.w    0    ; z
  629.     dc.w    380    ; depth
  630.     dc.w    160    ; scrn x
  631.     dc.w    128    ; scrn y
  632.     dc.l    cube_buff    ; buffer for x,y co-ords
  633.     dc.l    conn_buff    ; buffer for connects
  634.  
  635. cube_points:    Dc.w    +100,+100,+100
  636.         Dc.w    -100,+100,+100
  637.         Dc.w    -100,-100,+100
  638.         Dc.w    +100,-100,+100        
  639.         Dc.w    +100,+100,-100
  640.         Dc.w    -100,+100,-100
  641.         Dc.w    -100,-100,-100
  642.         Dc.w    +100,-100,-100
  643.         
  644. cube_connect:    Dc.w    0*4,1*4 ; 0
  645.         Dc.w    1*4,2*4 ; 1
  646.         Dc.w    2*4,3*4 ; 2
  647.         Dc.w    3*4,0*4 ; 3
  648.         
  649.         Dc.w    4*4,5*4 ; 4    
  650.         Dc.w    5*4,6*4 ; 5
  651.         Dc.w    6*4,7*4 ; 6
  652.         Dc.w    7*4,4*4 ; 7
  653.         
  654.         Dc.w    0*4,4*4 ; 8
  655.         Dc.w    1*4,5*4 ; 9
  656.         Dc.w    2*4,6*4 ; 10
  657.         Dc.w    3*4,7*4 ; 11
  658.  
  659.         dc.w    05*4,07*4 ; 12
  660.         dc.w    06*4,04*4 ; 13
  661.  
  662.         dc.w    07*4,00*4 ; 14
  663.         dc.w    03*4,04*4 ; 15
  664.  
  665.         dc.w    00*4,05*4 ; 16
  666.         dc.w    04*4,01*4 ; 17
  667.  
  668.         dc.w    01*4,06*4 ; 18
  669.         dc.w    02*4,05*4 ; 19
  670.  
  671.         dc.w    02*4,07*4 ; 20
  672.         dc.w    03*4,06*4 ; 21
  673.         
  674.         dc.w    02*4,00*4 ; 22
  675.         dc.w    03*4,01*4 ; 23
  676.  
  677. cube_s1:        dc.w    04*4,12*4,06*4,13*4 ;which connect lines form to make a surface
  678. cube_s2:        dc.w    14*4,11*4,15*4,08*4
  679. cube_s3:        dc.w    16*4,09*4,17*4,08*4
  680. cube_s4:        dc.w    18*4,09*4,19*4,10*4
  681. cube_s5:        dc.w    02*4,20*4,06*4,21*4
  682. cube_s6:        dc.w    03*4,22*4,01*4,23*4
  683.  
  684. cube_s7:        dc.w    04*4,05*4,06*4,07*4    ;which connecting lines form to make a surface
  685. cube_s8:        dc.w    03*4,11*4,07*4,08*4
  686. cube_s9:        dc.w    00*4,09*4,04*4,08*4
  687. cube_s10:        dc.w    01*4,09*4,05*4,10*4
  688. cube_s11:        dc.w    02*4,10*4,06*4,11*4
  689. cube_s12:        dc.w    03*4,02*4,01*4,00*4
  690.  
  691.  
  692. cube_surfaces:    dc.l    4-1,cube_s1,scrbuf1,0
  693.         dc.l    4-1,cube_s2,scrbuf1,0
  694.         dc.l    4-1,cube_s3,scrbuf1,0
  695.         dc.l    4-1,cube_s4,scrbuf1,0
  696.         dc.l    4-1,cube_s5,scrbuf1,0
  697.         dc.l    4-1,cube_s6,scrbuf1,0
  698.         dc.l    4-1,cube_s7,scrbuf1+256*40,0
  699.         dc.l    4-1,cube_s8,scrbuf1+256*40,0
  700.         dc.l    4-1,cube_s9,scrbuf1+256*40,0
  701.         dc.l    4-1,cube_s10,scrbuf1+256*40,0
  702.         dc.l    4-1,cube_s11,scrbuf1+256*40,0
  703.         dc.l    4-1,cube_s12,scrbuf1+256*40,0
  704.     
  705.  
  706. cube_buff:        ds.l    10*50
  707. conn_buff:        ds.l    10*5
  708.  
  709. Sintable:    incbin    "dh0:data/misc/sin.maxi"
  710.     incbin    "dh0:data/misc/sin.maxi"
  711.  
  712.     section    small,bss_c
  713.     
  714. scrbuf1:        ds.l    10*768
  715. screena:        ds.l    10*768
  716. screenb:        ds.l    10*768
  717.  
  718.  
  719.     end
  720.     
  721.  
  722.